/**
 * 
 */
package org.springyu.codegenerator.model;

import java.io.Serializable;

import org.apache.commons.collections.map.LinkedMap;

/**
 * @author springyu
 *如同表结构
 */
public class TabStruct implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	
	 /**
     * 表列的map列表，按顺序存放
     */
    private LinkedMap columns;
    
    /**
     * 表名
     */
  	private String name="";
  	/**
  	 * 属性名
  	 */
  	private String attrName;
  	/**
  	 * 表备注
  	 */
  	private String comment;

    /**
     * 表名，在生成xml流时用到，一条记录的标签名。
     */
    private String    alias = "TABLENAME";

    /**
     * 构造函数
     */
    public TabStruct(){
        columns = new LinkedMap();
    }
    
    /**
     * 构造函数
     */
    public TabStruct(String alias){
        columns = new LinkedMap();
        this.alias = alias;
    }

    /**
     * 增加列
     * 
     * @param colName 列名称
     */
    public void addColumn(String colName) {
        addColumn(new Column(colName));
    }

    /**
     * 增加列
     * 
     * @param column 列对象
     */
    public void addColumn(Column column) {
        if (columns.indexOf(column.getName()) >= 0) {
            throw new IllegalArgumentException("The column with the name " + column.getName() + " already exist!");
        }
        columns.put(column.getName(), column);
    }


    /**
     * 从一结构中增加列
     * @param schema
     */
    public void addColumn(TabStruct schema) {
        for (int i = 0; i < schema.getColLength(); i++) {
            // 存在重复的不增加
            if ( columns.indexOf(schema.getColumn(i).getName()) < 0) {
                addColumn(schema.getColumn(i));
            }
        }
    }
    /**
     * 返回列所在的位置
     * 
     * @param colName 列名称
     * @return 列位置
     */
    public int getColIndex(String colName) {
        return columns.indexOf(colName);
    }

    /**
     * 获得列对象
     * 
     * @param colName 列名称
     * @return 列对象
     */
    public Column getColumn(String colName) {
        return (Column) columns.get(colName);
    }

    /**
     * 获得列对象
     * 
     * @param colIndex 列序号
     * @return 列对象
     */
    public Column getColumn(int colIndex) {
        return (Column) columns.getValue(colIndex);
    }

    /**
     * 返回列数量
     * 
     * @return 列数量
     */
    public int getColLength() {
        return columns.size();
    }
    /**
     * @return the alias
     */
    public String getAlias() {
        return alias;
    }

    /**
     * @param alias the alias to set
     */
    public void setAlias(String alias) {
        this.alias = alias;
    }

    public boolean isNotExistColumn(String colName){
        if (columns.indexOf(colName) >= 0) {
            return false;
        }
        return true;
    }

	/**
	 * @return the columns
	 */
	public LinkedMap getColumns() {
		return columns;
	}

	/**
	 * @param columns the columns to set
	 */
	public void setColumns(LinkedMap columns) {
		this.columns = columns;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the attrName
	 */
	public String getAttrName() {
		return attrName;
	}

	/**
	 * @param attrName the attrName to set
	 */
	public void setAttrName(String attrName) {
		this.attrName = attrName;
	}

	/**
	 * @return the comment
	 */
	public String getComment() {
		return comment;
	}

	/**
	 * @param comment the comment to set
	 */
	public void setComment(String comment) {
		this.comment = comment;
	}
    
    

}
